From acdee1b65eb5d8491ada3aa6508a567454d72866 Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Tue, 14 Nov 2006 17:11:45 +0000 Subject: [PATCH] [XEN] Extend fix from 12403:680b37789200 to other emulation paths. Signed-off-by: Tim Deegan --- xen/arch/x86/mm/shadow/multi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index d199c90bfb..ba15cb65d2 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3778,7 +3778,7 @@ sh_x86_emulate_write(struct vcpu *v, unsigned long vaddr, void *src, shadow_validate_guest_pt_write(v, mfn, addr, bytes_on_page); bytes -= bytes_on_page; /* If we are writing zeros to this page, might want to unshadow */ - if ( *(u32 *)addr == 0 ) + if ( likely(bytes_on_page >= 4) && (*(u32 *)addr == 0) ) check_for_early_unshadow(v, mfn); sh_unmap_domain_page(addr); } @@ -3823,7 +3823,7 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, unsigned long vaddr, vaddr, prev, old, new, *(unsigned long *)addr, bytes); /* If we are writing zeros to this page, might want to unshadow */ - if ( *(u8 *)addr == 0 ) + if ( likely(bytes >= 4) && (*(u32 *)addr == 0) ) check_for_early_unshadow(v, mfn); sh_unmap_domain_page(addr); @@ -3858,7 +3858,7 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v, unsigned long vaddr, rv = X86EMUL_CMPXCHG_FAILED; /* If we are writing zeros to this page, might want to unshadow */ - if ( *(u8 *)addr == 0 ) + if ( *(u32 *)addr == 0 ) check_for_early_unshadow(v, mfn); sh_unmap_domain_page(addr); -- 2.30.2